﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PSE.Framework.UI.Settings;

namespace PSE.Framework.UI.Application.SmartClient
{
    /// <summary>
    /// Classe que contém as configurações da aplicação
    /// </summary>
    [Serializable]
    public abstract class ApplicationConfigurationObject<TConfigurationObjectType> : IConfigurationObject<TConfigurationObjectType>
        where TConfigurationObjectType : struct
    {
        /// <summary>
        /// Construtor padrão
        /// </summary>
        public ApplicationConfigurationObject()
        {
            this.ConfigurationName = "ApplicationConfiguration";
            this.ConfigurationType = this.GetConfigurationType();
        }

        protected abstract TConfigurationObjectType GetConfigurationType();

        /// <summary>
        /// Nome do objeto de configuração
        /// </summary>
        public string ConfigurationName { get; set; }

        /// <summary>
        /// Tipo do objeto de configuração
        /// </summary>
        public TConfigurationObjectType ConfigurationType { get; set; }

        /// <summary>
        /// Idioma da aplicação
        /// </summary>
        public string Language { get; set; }

        /// <summary>
        /// Tema da aplicação
        /// </summary>
        public string Theme { get; set; }

        /// <summary>
        /// Zoom da aplicação
        /// </summary>
        public int Zoom { get; set; }
    }
}
